From: Andrew Cooper Date: Mon, 9 May 2016 17:09:38 +0000 (+0100) Subject: x86/svm: Don't unconditionally use a new ASID in svm_invlpg_intercept() X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~1137 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=eee511dec9d1f7e2bdfb4aebfe5ffbd70cdf6f51;p=xen.git x86/svm: Don't unconditionally use a new ASID in svm_invlpg_intercept() paging_invlpg() already returns a boolean indicating whether an invalidation is necessary or not. A return value of 0 indicates that the specified virtual address wasn't shadowed (or has already been flushed), cannot currently be cached in the TLB. This is a performance optimisation. Signed-off-by: Andrew Cooper Reviewed-by: Boris Ostrovsky Reviewed-by: Tim Deegan Release-acked-by: Wei Liu --- diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index 7634c3fc42..081a5d8d89 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -2224,8 +2224,8 @@ static void svm_invlpg_intercept(unsigned long vaddr) { struct vcpu *curr = current; HVMTRACE_LONG_2D(INVLPG, 0, TRC_PAR_LONG(vaddr)); - paging_invlpg(curr, vaddr); - svm_asid_g_invlpg(curr, vaddr); + if ( paging_invlpg(curr, vaddr) ) + svm_asid_g_invlpg(curr, vaddr); } static struct hvm_function_table __initdata svm_function_table = {